package net.lab1024.sa.admin.module.business.wms.stock.domain.form;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.Data;

/**
 * 库存信息表（单租户版） 更新表单
 *
 * @Author ADog
 * @Date 2025-09-20 15:55:03
 * @Copyright 1.0
 */

@Data
public class StockUpdateForm {

    @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "主键 不能为空")
    private Long stockId;

    @Schema(description = "仓库ID（关联仓库表）", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "仓库ID（关联仓库表） 不能为空")
    private Long warehouseId;

    @Schema(description = "物料ID（关联t_core_material表）", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "物料ID（关联t_core_material表） 不能为空")
    private Long materialId;

    @Schema(description = "库存编码（业务唯一，如“WH01-MAT001-B202409”）", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotBlank(message = "库存编码（业务唯一，如“WH01-MAT001-B202409”） 不能为空")
    private String stockCode;

    @Schema(description = "批次编码（物料生产批次，如“2024092001”）", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotBlank(message = "批次编码（物料生产批次，如“2024092001”） 不能为空")
    private String batchCode;

    @Schema(description = "实际库存数量（保留3位小数，支持散装物料如“10.500kg”）", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "实际库存数量（保留3位小数，支持散装物料如“10.500kg”） 不能为空")
    private BigDecimal stockQuantity;

    @Schema(description = "锁定库存数量（已下单未出库，不允许其他订单占用）", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "锁定库存数量（已下单未出库，不允许其他订单占用） 不能为空")
    private BigDecimal lockedQuantity;

    @Schema(description = "生产日期（用于效期追溯）", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "生产日期（用于效期追溯） 不能为空")
    private LocalDateTime productionTime;

    @Schema(description = "过期日期（用于临期/过期预警）", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "过期日期（用于临期/过期预警） 不能为空")
    private LocalDateTime expirationTime;

    @Schema(description = "是否禁用：[0=未禁用，1=已禁用]（禁用后不参与库存分配）", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "是否禁用：[0=未禁用，1=已禁用]（禁用后不参与库存分配） 不能为空")
    private Integer isDisabled;

    @Schema(description = "是否逻辑删除：[0=未删除，1=已删除]（避免物理删除丢失数据）", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "是否逻辑删除：[0=未删除，1=已删除]（避免物理删除丢失数据） 不能为空")
    private Integer isDeleted;

    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "创建时间 不能为空")
    private LocalDateTime createTime;

    @Schema(description = "更新时间（自动更新）", requiredMode = Schema.RequiredMode.REQUIRED)
    @NotNull(message = "更新时间（自动更新） 不能为空")
    private LocalDateTime updateTime;

}